home *** CD-ROM | disk | FTP | other *** search
- <!-- $RCSfile$$Revision$$Date$ -->
- <!-- $Log$ -->
- <HTML>
- <TITLE> PERL </TITLE>
- <h2>NAME</h2>
- perl - Practical Extraction and Report Language
- <p><h2>SYNOPSIS</h2>
- For ease of access, the Perl manual has been split up into a number
- of sections:
- <p>
- <ul>
- <li><A HREF="perl.html">perl</A> Perl overview (this section)
- <li><A HREF="perldata.html">perldata</A> Perl data structures
- <li><A HREF="perlsyn.html">perlsyn</A> Perl syntax
- <li><A HREF="perlop.html">perlop</A> Perl operators and precedence
- <li><A HREF="perlre.html">perlre</A> Perl regular expressions
- <li><A HREF="perlrun.html">perlrun</A> Perl execution and options
- <li><A HREF="perlfunc.html">perlfunc</A> Perl builtin functions
- <li><A HREF="perlvar.html">perlvar</A> Perl predefined variables
- <li><A HREF="perlsub.html">perlsub</A> Perl subroutines
- <li><A HREF="perlmod.html">perlmod</A> Perl modules
- <li><A HREF="perlref.html">perlref</A> Perl references and nested data structures
- <li><A HREF="perlobj.html">perlobj</A> Perl objects
- <li><A HREF="perlbot.html">perlbot</A> Perl OO tricks and examples
- <li><A HREF="perldebug.html">perldebug</A> Perl debugging
- <li><A HREF="perldiag.html">perldiag</A> Perl diagnostic messages
- <li><A HREF="perlform.html">perlform</A> Perl formats
- <li><A HREF="perlipc.html">perlipc</A> Perl interprocess communication
- <li><A HREF="perlsec.html">perlsec</A> Perl security
- <li><A HREF="perltrap.html">perltrap</A> Perl traps for the unwary
- <li><A HREF="perlstyle.html">perlstyle</A> Perl style guide
- <li><A HREF="perlapi.html">perlapi</A> Perl application programming interface
- <li><A HREF="perlguts.html">perlguts</A> Perl internal functions for those doing extensions
- <li><A HREF="perlcall.html">perlcall</A> Perl calling conventions from C
- <li><A HREF="perlovl.html">perlovl</A> Perl overloading semantics
- <li><A HREF="perlbook.html">perlbook</A> Perl book information
- </ul>
- (If you're intending to read these straight through for the first time,
- the suggested order will tend to reduce the number of forward references.)
- <p>If something strange has gone wrong with your program and you're not
- sure where you should look for help, try the
- <A HREF="perlrun.html#perlrun_362">-w</A>
- switch first. It
- will often point out exactly where the trouble is.
- <p><h2>DESCRIPTION</h2>
- Perl is an interpreted language optimized for scanning arbitrary
- text files, extracting information from those text files, and printing
- reports based on that information. It's also a good language for many
- system management tasks. The language is intended to be practical
- (easy to use, efficient, complete) rather than beautiful (tiny,
- elegant, minimal). It combines (in the author's opinion, anyway) some
- of the best features of C, <B>sed</B>, <B>awk</B>, and <B>sh</B>, so people
- familiar with those languages should have little difficulty with it.
- (Language historians will also note some vestiges of <B>csh</B>, Pascal,
- and even BASIC-PLUS.) Expression syntax corresponds quite closely to C
- expression syntax. Unlike most Unix utilities, Perl does not
- arbitrarily limit the size of your data--if you've got the memory,
- Perl can slurp in your whole file as a single string. Recursion is
- of unlimited depth. And the hash tables used by associative arrays
- grow as necessary to prevent degraded performance. Perl uses
- sophisticated pattern matching techniques to scan large amounts of data
- very quickly. Although optimized for scanning text, Perl can also
- deal with binary data, and can make dbm files look like associative
- arrays (where dbm is available). Setuid Perl scripts are safer than
- C programs through a dataflow tracing mechanism which prevents many
- stupid security holes. If you have a problem that would ordinarily use
- <B>sed</B> or <B>awk</B> or <B>sh</B>, but it exceeds their capabilities or must
- run a little faster, and you don't want to write the silly thing in C,
- then Perl may be for you. There are also translators to turn your
- <B>sed</B> and <B>awk</B> scripts into Perl scripts.
- <p>But wait, there's more...
- <p>Perl version 5 is nearly a complete rewrite, and provides
- the following additional benefits:
- <p>
- <dl>
-
- <dt><b><A NAME="perlcall_39">* Many usability enhancements</A></b>
- <dd>
- It is now possible to write much more readable Perl code (even within
- regular expressions). Formerly cryptic variable names can be replaced
- by mnemonic identifiers. Error messages are more informative, and the
- optional warnings will catch many of the mistakes a novice might make.
- This cannot be stressed enough. Whenever you get mysterious behavior,
- try the
- <A HREF="perlrun.html#perlrun_362">-w</A>
- switch!!! Whenever you don't get mysterious behavior,
- try using
- <A HREF="perlrun.html#perlrun_362">-w</A>
- anyway.
- <p></dd>
- <dt><B>* Simplified grammar</B>
- <dd>
- The new yacc grammar is one half the size of the old one. Many of the
- arbitrary grammar rules have been regularized. The number of reserved
- words has been cut by 2/3. Despite this, nearly all old Perl scripts
- will continue to work unchanged.
- <p></dd>
- <dt><B>* Lexical scoping</B>
- <dd>
- Perl variables may now be declared within a lexical scope, like "auto"
- variables in C. Not only is this more efficient, but it contributes
- to better privacy for "programming in the large".
- <p></dd>
- <dt><B>* Arbitrarily nested data structures</B>
- <dd>
- Any scalar value, including any array element, may now contain a
- reference to any other variable or subroutine. You can easily create
- anonymous variables and subroutines. Perl manages your reference
- counts for you.
- <p></dd>
- <dt><B>* Modularity and reusability</B>
- <dd>
- The Perl library is now defined in terms of modules which can be easily
- shared among various packages. A package may choose to import all or a
- portion of a module's published interface. Pragmas (that is, compiler
- directives) are defined and used by the same mechanism.
- <p></dd>
- <dt><B>* Object-oriented programming</B>
- <dd>
- A package can function as a class. Dynamic multiple inheritance and
- virtual methods are supported in a straightforward manner and with very
- little new syntax. Filehandles may now be treated as objects.
- <p></dd>
- <dt><B>* Embeddible and Extensible</B>
- <dd>
- Perl may now be embedded easily in your C or C++ application, and can
- either call or be called by your routines through a documented
- interface. The XS preprocessor is provided to make it easy to glue
- your C or C++ routines into Perl. Dynamic loading of modules is
- supported.
- <p></dd>
- <dt><B>* POSIX compliant</B>
- <dd>
- A major new module is the POSIX module, which provides access to all
- available POSIX routines and definitions, via object classes where
- appropriate.
- <p></dd>
- <dt><B>* Package constructors and destructors</B>
- <dd>
- The new BEGIN and END blocks provide means to capture control as
- a package is being compiled, and after the program exits. As a
- degenerate case they work just like awk's BEGIN and END when you
- use the
- <A HREF="perlrun.html#perlrun_354">-p</A>
- or
- <A HREF="perlrun.html#perlrun_353">-n</A>
- switches.
- <p></dd>
- <dt><B>* Multiple simultaneous DBM implementations</B>
- <dd>
- A Perl program may now access DBM, NDBM, SDBM, GDBM, and Berkeley DB
- files from the same script simultaneously. In fact, the old dbmopen
- interface has been generalized to allow any variable to be tied
- to an object class which defines its access methods.
- <p></dd>
- <dt><B>* Subroutine definitions may now be autoloaded</B>
- <dd>
- In fact, the AUTOLOAD mechanism also allows you to define any arbitrary
- semantics for undefined subroutine calls. It's not just for autoloading.
- <p></dd>
- <dt><B>* Regular expression enhancements</B>
- <dd>
- You can now specify non-greedy quantifiers. You can now do grouping
- without creating a backreference. You can now write regular expressions
- with embedded whitespace and comments for readability. A consistent
- extensibility mechanism has been added that is upwardly compatible with
- all old regular expressions.
- <p></dd>
-
- </dl>
-
- Ok, that's <I>definitely</I> enough hype.
- <p><h2>ENVIRONMENT</h2>
-
- <dl>
- <dt><B>HOME</B>
- <dd>
- Used if chdir has no argument.
- <p></dd>
- <dt><B>LOGDIR</B>
- <dd>
- Used if chdir has no argument and HOME is not set.
- <p></dd>
- <dt><B>PATH</B>
- <dd>
- Used in executing subprocesses, and in finding the script if
- <A HREF="perlrun.html#perlrun_357">-S</A>
- is
- used.
- <p></dd>
- <dt><B>PERL5LIB</B>
- <dd>
- A colon-separated list of directories in which to look for Perl library
- files before looking in the standard library and the current
- directory. If PERL5LIB is not defined, PERLLIB is used.
- <p></dd>
- <dt><B>PERL5DB</B>
- <dd>
- The command used to get the debugger code. If unset, uses
- <p></dd>
- <pre>
- BEGIN { require 'perl5db.pl' }
- </pre>
- <dt><B>PERLLIB</B>
- <dd>
- A colon-separated list of directories in which to look for Perl library
- files before looking in the standard library and the current
- directory. If PERL5LIB is defined, PERLLIB is not used.
- <p></dd>
-
- </dl>
-
- Apart from these, Perl uses no other environment variables, except
- to make them available to the script being executed, and to child
- processes. However, scripts running setuid would do well to execute
- the following lines before doing anything else, just to keep people
- honest:
- <p><pre>
- $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need
- $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'};
- $ENV{'IFS'} = '' if defined $ENV{'IFS'};
- </pre>
- <h2>AUTHOR</h2>
- Larry Wall <<I>lwall@netlabs.com.</I>, with the help of oodles of other folks.
- <p><h2>FILES</h2>
- <pre>
- "/tmp/perl-e$$" temporary file for -e commands
- "@INC" locations of perl 5 libraries
- </pre>
- <h2>SEE ALSO</h2>
-
- <listing>
- a2p awk to perl translator
- s2p sed to perl translator
- </listing>
- <h2>DIAGNOSTICS</h2>
- The
- <A HREF="perlrun.html#perlrun_362">-w</A>
- switch produces some lovely diagnostics.
- <p>See
- <A HREF="perldiag.html">
- the perldiag manpage</A>
- for explanations of all Perl's diagnostics.
- <p>Compilation errors will tell you the line number of the error, with an
- indication of the next token or token type that was to be examined.
- (In the case of a script passed to Perl via
- <A HREF="perlrun.html#perlrun_348">-e</A>
- switches, each
-
- <A HREF="perlrun.html#perlrun_348">-e</A>
- is counted as one line.)
- <p>Setuid scripts have additional constraints that can produce error
- messages such as "Insecure dependency". See
- <A HREF="perlsec.html">
- the perlsec manpage</A>
- .
- <p>Did we mention that you should definitely consider using the
- <A HREF="perlrun.html#perlrun_362">-w</A>
-
- switch?
- <p><h2>BUGS</h2>
- The
- <A HREF="perlrun.html#perlrun_362">-w</A>
- switch is not mandatory.
- <p>Perl is at the mercy of your machine's definitions of various
- operations such as type casting, atof() and sprintf().
- <p>If your stdio requires an seek or eof between reads and writes on a
- particular stream, so does Perl. (This doesn't apply to sysread()
- and syswrite().)
- <p>While none of the built-in data types have any arbitrary size limits
- (apart from memory size), there are still a few arbitrary limits: a
- given identifier may not be longer than 255 characters, and no
- component of your PATH may be longer than 255 if you use
- <A HREF="perlrun.html#perlrun_357">-S</A>
- . A regular
- expression may not compile to more than 32767 bytes internally.
- <p>Perl actually stands for Pathologically Eclectic Rubbish Lister, but
- don't tell anyone I said that.
- <p><h2>NOTES</h2>
- The Perl motto is "There's more than one way to do it." Divining
- how many more is left as an exercise to the reader.
- <p>The three principle virtues of a programmer are Laziness,
- Impatience, and Hubris. See the Camel Book for why.<p>